/**
 * 通用工具函数
 */

/**
 * 格式化文件大小
 * @param bytes 文件字节大小
 * @returns 格式化后的文件大小
 */
export function formatFileSize(bytes: number): string {
  if (bytes === 0) return '0 B'
  
  const units = ['B', 'KB', 'MB', 'GB', 'TB']
  const i = Math.floor(Math.log(bytes) / Math.log(1024))
  
  return `${(bytes / Math.pow(1024, i)).toFixed(2)} ${units[i]}`
}

/**
 * 从URL获取文件名
 * @param url 文件URL
 * @returns 文件名
 */
export function getFileNameFromUrl(url: string): string {
  try {
    // 尝试从URL中提取文件名
    const urlObj = new URL(url)
    const pathname = urlObj.pathname
    return pathname.substring(pathname.lastIndexOf('/') + 1)
  } catch (error) {
    // 如果URL解析失败，返回URL的最后部分
    return url.substring(url.lastIndexOf('/') + 1)
  }
}

/**
 * 检查文件类型是否为图片
 * @param type 文件MIME类型
 * @returns 是否为图片
 */
export function isImageFile(type: string): boolean {
  return type.startsWith('image/')
}

/**
 * 检查文件类型是否为视频
 * @param type 文件MIME类型
 * @returns 是否为视频
 */
export function isVideoFile(type: string): boolean {
  return type.startsWith('video/')
}

/**
 * 防抖函数
 * @param fn 要执行的函数
 * @param delay 延迟时间（毫秒）
 * @returns 防抖处理后的函数
 */
export function debounce<T extends (...args: any[]) => any>(
  fn: T,
  delay: number
): (...args: Parameters<T>) => void {
  let timer: number | null = null
  
  return function(this: any, ...args: Parameters<T>): void {
    if (timer) {
      clearTimeout(timer)
    }
    
    timer = window.setTimeout(() => {
      fn.apply(this, args)
      timer = null
    }, delay)
  }
} 